package datastructure;
/*
 *  @类名: LinkQueue
 *  @作者:云建文 屈子涵 黄珂 孙烨
 *  @班级：2023级网络空间安全一班
 *  @时间:2024/11/6
 *  @描述:队列的链表实现方式，

 */


public class LinkQueue <E>implements Queue{
    class LinkNode<E>{
        //作者：屈子涵
        E data;//定义泛型变量 data作为数据成员
        LinkNode<E> next;//定义LinkNode<E>类的对象next来引用下一个节点
    }
    LinkNode<E> front;			//首结点指针
    LinkNode<E> rear;			//尾结点指针
    //构造方法，初始化链表队列
    public LinkQueue()
    //作者：屈子涵
    {
        front=new LinkNode<>();//为头结点分配空间
        rear=front;//尾节点指向头节点
        front.next=null;//头结点的next为空

    }
    public boolean empty()//判断队列是否为空，若队列为空，返回真，否则返回假。
    //作者：屈子涵
    {
        if(front.next == null)
            return true;
        else return false;
    }
    public void push(Object o) //进队，将元素e进队作为队尾元素。
    //作者：屈子涵
    {
        LinkNode xinjiedian=new LinkNode<E>();
        xinjiedian.data=o;
        xinjiedian.next=null;
        rear.next=xinjiedian;
        rear=xinjiedian;
    }
    public E pop()//出队，从队头出队一个元素。
    //作者：云建文
    {
        if(empty())
        {
            throw new IllegalArgumentException("队列为空！");
        }
        else {
            E x ;
            x=front.next.data;
            front.next = front.next.next;
            return x;
        }
    }
    public E peek() //取队头，返回队头元素而不出队。
    {
        //作者：黄珂 孙烨
        if(empty())
        {
            throw new IllegalArgumentException("队列为空！");
        }
        else {
            E x ;
            x = front.next.data;
            return x;
        }
    }
}

